Expand description

Rust hashes library.

This is a simple, no-dependency library which implements the hash functions needed by Bitcoin. These are SHA256, SHA256d, and RIPEMD160. As an ancillary thing, it exposes hexadecimal serialization and deserialization, since these are needed to display hashes anway.

§Commonly used operations

Hashing a single byte slice or a string:

use groestlcoin_hashes::sha256;
use groestlcoin_hashes::Hash;

let bytes = [0u8; 5];
let hash_of_bytes = sha256::Hash::hash(&bytes);
let hash_of_string = sha256::Hash::hash("some string".as_bytes());

Hashing content from a reader:

use groestlcoin_hashes::sha256;
use groestlcoin_hashes::Hash;

#[cfg(std)]
let mut reader: &[u8] = b"hello"; // in real code, this could be a `File` or `TcpStream`
let mut engine = sha256::HashEngine::default();
std::io::copy(&mut reader, &mut engine)?;
let hash = sha256::Hash::from_engine(engine);

#[cfg(not(std))]

Hashing content by std::io::Write on HashEngine:

use groestlcoin_hashes::sha256;
use groestlcoin_hashes::Hash;
use std::io::Write;

#[cfg(std)]
let mut part1: &[u8] = b"hello";
let mut part2: &[u8] = b" ";
let mut part3: &[u8] = b"world";
let mut engine = sha256::HashEngine::default();
engine.write_all(part1)?;
engine.write_all(part2)?;
engine.write_all(part3)?;
let hash = sha256::Hash::from_engine(engine);

#[cfg(not(std))]

Re-exports§

Modules§

  • Useful comparison functions.
  • Groestl512d implementation (double Groestl512).
  • HASH160 (SHA256 then RIPEMD160) implementation.
  • Hash-based Message Authentication Code (HMAC).
  • RIPEMD160 implementation.
  • Macros for serde trait implementations, and supporting code.
  • SHA1 implementation.
  • SHA256 implementation.
  • SHA256d implementation (double SHA256).
  • SHA256t implementation (tagged SHA256).
  • SHA512 implementation.
  • SHA512_256 implementation.
  • SipHash 2-4 implementation.

Macros§

  • Adds slicing traits implementations to a given type $ty
  • Creates a new newtype around a Hash type.
  • Adds hexadecimal formatting implementation of a trait $imp to a given type $ty.
  • Implements Serialize and Deserialize for a type $t which represents a newtype over a byte-slice over length $len.
  • Macro used to define a newtype tagged hash.

Structs§

  • Attempted to create a hash from an invalid length slice.

Traits§

  • Trait which applies to hashes of all types.
  • A hashing engine which bytes can be serialized into.